package model;
import java.util.*;
/**
 * Class LoanCon - en liste over de lån programmet indeholder
 * 
 * Klassen er en del af programmet DVD lending
 * DVD lending er et udlånssystem, som er textbaseseret UI.
 * 
 * LoanCon indeholder en liste af de objekter Loan, som er blevet created.
 * 
 * @author Ole, Silas, Danny, Alex, Anders, Ronnie
 * 
 */
public class LoanCon
{
    // instance variables
    private ArrayList<Loan> loans;
    private static LoanCon instance;

    /**
     * Constructor for objects of class LoanCon
     */
    public LoanCon()
    {
        // initialise instance variables
        loans = new ArrayList<Loan>();
    }

    /**
     * Metoden addLoan indsætter objektet Loan på listen loans
     */
    public void addLoan(Loan l)
    {
        if(loans.isEmpty())
        {
            loans.add(l);
        }
        else
        {
            for(int i = 0; i < loans.size(); i++)
            {
                if(l.getID().equals(loans.get(i).getID()))
                {
                    System.out.println("Der findes allerede et lån med dette id");
                }
                else
                {
                    loans.add(l);
                }
            }
        }
    }

    /**
     * Metoden returnLoan fjerner Objektet Loan fra listen loans 
     */
    public void returnLoan(Loan l)
    {
        if(loans.isEmpty())
        {
            System.out.println("Listen er tom!");   
        }
        else if(!loans.contains(l))
        {
            System.out.println("Objektet findes ikke på listen!");   
        }
        else
        {
            loans.remove(l);
        }
    }

    /**
     * @param ID Her bruges id til at søge på et lån
     * @return Returnerer et lån
     */
    public Loan findLoan(String ID){
        Loan currentL = null;
        int i=0;
        boolean found = false;
        if(loans.isEmpty())
        {
            System.out.println("\n");
        }
        else
        {
            while (!found && i<loans.size()){
                if (loans.get(i).getID().equals(ID)){
                    currentL = loans.get(i);
                    found = true; //hvis fundes, returneres true
                }

                else{
                    /**
                     * Postfix increment til at styre, 
                     * hvilken plads i Arrayet der søges i, 
                     * når der itereres igennem.
                     */
                    i++; 

                }
            }
        }
        return currentL;
    }

    /**
     * @return Returnerer instance
     */
    public static LoanCon getInstance(){
        if(instance == null){
            instance = new LoanCon();
        }
        return instance;
    }

    /**
     * Printer listen over Loans
     */
    public void listLoans()
    {
        if(loans.isEmpty())
        {
            System.out.println("Listen er tom");
        }
        else
        {
            for (int i = 0; i < loans.size(); i++)
            {
                System.out.println("Låner " + i+1 + "\n");
                loans.get(i).getInfo();
            }
        }
    }

    /**
     * @return Returnerer en copy
     */
    public Copy getCopy(Loan l)
    {
        return l.getCopy();
    }

    /**
     * Setter Loan status til at være Returned
     */
    public void setLoanStateReturn(Loan l)
    {
        l.setState("Returned!");
    }

}
